Q: ÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^ÇΔÇΔLJDžégǧÉfÉRÉìÉvÉåÉbÉTÉRÉìÉ|Å[ÉlÉìÉgÇãLèqǵǃǮÇËÅAÇ∑Ç◊ǃÇÃÉCÉÅÅ[ÉWÉfÅ[É^ÇêLí£ëOÇ…íPàÍÇÃÉoÉbÉtÉ@Ç…ì«Ç›çûÇfiïKóvǙdžÇËÇ‹Ç∑ÅBImageCodecPreflight Çé¿ëïÇ∑ÇÈç€Ç…ÅAbandMin ÇämǩDžÉCÉÅÅ[ÉWÇÃÉtÉãÉnÉCÉgÇ…ê›íËǵNjǵÇΩÅBǵǩǵÅAImageCodecBeginBand Ç…ìnÇ≥ÇÍÇΩÉoÉbÉtÉ@ÉTÉCÉYÇÕ 32K Ç…ê›íËÇ≥ÇÍǃǮÇËÅAÉfÉBÉXÉNè„ÇÃÉCÉÅÅ[ÉWÇÃÉTÉCÉYDžǻǡǃǢNjÇπÇÒÅBDZÇÍÇÕÇ»Ç∫Ç≈ǵÇÂǧǩÅAÇ‹ÇΩÅAǫǧÇ∑ÇÍÇŒÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇê≥ǵÇ≠åƒÇ—èoÇπÇÈÇÃÇ≈ǵÇÂǧǩÅH
A: FDecompressImage ÅiÇ‹ÇΩÇÕ Image Compression Manager DždžÇÈä÷òAÇ∑ÇÈä÷êîÇà 1 ǬÅjÇÃåƒÇ—èoǵë§ÇÕÅAà≥èkÉfÅ[É^ÇÃÇ∑Ç◊ǃÇíPàÍÇÃÉoÉbÉtÉ@Ç…ópà”Ç∑ÇÈÇ©ÅAÇ‹ÇΩÇÕÅAÇÊÇËè¨Ç≥Ç»ÉoÉbÉtÉ@ÇΔÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇópà”Ç∑ÇÈÇ©ÇëIǑDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
ÉfÅ[É^ÉçÅ[Éhä÷êîÇÃÉoÉbÉtÉ@ÇÕç≈í· 32K Ç≈džÇËÅAcodecMinimumDataSize ÇÕ 32K ÇΔǵǃíËã`Ç≥ÇÍǃǢNjÇ∑ÅB
Ç«ÇøÇÁÇÃÉÇÅ[ÉhLJçlǶÇÁÇÍÇÈÇÃÇ≈ÅAÉCÉÅÅ[ÉWÉfÉRÉìÉvÉåÉbÉTÉRÉìÉ|Å[ÉlÉìÉgÇÕóºï˚ÇÃÉÇÅ[ÉhÇÉTÉ|Å[ÉgÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBåªç›ÇÃÉoÅ[ÉWÉáÉìÇà QuickTime Ç≈ÇÕÅAÉrÉfÉIÉÅÉfÉBÉAÉnÉìÉhÉâÇÕÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇégǧDZÇΔÇÕdžÇËÇ‹ÇπÇÒÇ™ÅAäÓñ{ÇÃÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^ÇÕèÌÇ…ÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇégǢNjÇ∑ÅB
ÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÉCÉìÉ^ÉtÉFÅ[ÉXÇÕÅAÉCÉÅÅ[ÉWÉfÉRÉìÉvÉåÉbÉTÉRÉìÉ|Å[ÉlÉìÉgÇ…ÇÊǡǃégǢǂÇ∑Ç¢ÇÊǧDžê›åvÇ≥ÇÍǃǮÇËÅAì¸óÕÉfÅ[É^Ç 1 âÒÇæÇØéÛÇØìnÇ∑ïKóvǙdžÇÈÇæÇØÇ≈Ç∑ÅBÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇ™íÒãüÇ≥ÇÍÇÈèÍçáÇÕÅAÉfÅ[É^ÇÃì«Ç›éÊÇËå≥ÇΔÇ»ÇÈÉ|ÉCÉìÉ^ÇégǡǃíËä˙ìIÇ…åƒÇ—èoǵÅAïKóvÇΔévÇÌÇÍÇÈç≈ëÂå¿ÇÃêÊì«Ç›ÇéwíËÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBïKóvÇ…âûÇ∂ǃÅAÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇÕÉ|ÉCÉìÉ^ÇçXêVǵǃÅAéñëOÇ…ÉfÅ[É^Ç™è\ï™Ç…ë∂ç›Ç∑ÇÈèÛë‘DžǵNjÇ∑ÅB
ǵǩǵÅAÇ¢Ç≠ǬǩÇÃóùóRÇ…ÇÊÇËÅAÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇ÷ÇÃåƒÇ—èoǵÇÉfÉRÉìÉvÉåÉbÉTÇ…ìùçáÇ≈ǴǻǢèÍçáǙdžÇËÇ‹Ç∑ÅBÇΩÇΔǶnjÅAé¿ç€ÇÃêLí£èàóùÇ™ÅAèCê≥ïsâ¬î\Ç»ÉRÅ[ÉhÇ‚ÉnÅ[ÉhÉEÉFÉAÇ…ÇÊǡǃé¿çsÇ≥ÇÍÇÈèÍçáÇ≈Ç∑ÅBDZÇÃÇÊǧǻèÍçáÇÕÅAÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇï°êîâÒåƒÇ—èoǵÅAñàâÒ p->bufferSize ÉoÉCÉgÇóvãÅÇ∑ÇÈDZÇΔÇ…ÇÊÇËÅAÉtÉåÅ[ÉÄëSëÃÇÉoÉbÉtÉ@Ç…ÉRÉsÅ[Ç∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
äÓñ{ÇÃÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^ÇÕÅAÉCÉÅÅ[ÉWãLèqÇà dataSize Ç…à≥èkÉfÅ[É^ëSëÃÇÃé¿ç€ÇÃÉTÉCÉYÇ™ä‹Ç‹ÇÍǃǢÇÈDZÇΔÇèÌÇ…ï€èÿǵNjÇ∑ÅB
à»â∫Ç…ÅADZÇÃédëgÇ›Çé¶ÇµÇ‹Ç∑ÅB
OSErr ICMDataProcPtr(Ptr *dataP, long bytesNeeded, long refcon);
|
- ÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoÇ∑ÇΔÇ´Ç…ÅAÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇÃÉoÉbÉtÉ@Ç÷ÇÃÉ|ÉCÉìÉ^ÇÃÉAÉhÉåÉXÇìnǵNjÇ∑ÅBÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇÕÅAÉ|ÉCÉìÉ^Ç™åªç›Ç‡ÇªÇÃÉoÉbÉtÉ@ÇéwǵǃǢÇÈǩǫǧǩÇÉ`ÉFÉbÉNǵÅAÉ|ÉCÉìÉ^ÇÃåªç›ÇÃílÇégǡǃÉfÅ[É^ǙǫÇÍÇæÇØè¡îÔÇ≥ÇÍÇΩÇ©ÇåvéZǵNjÇ∑ÅB
Ptr dataPtr = drp->codecData;
Size bytesConsumed;
Boolean done = false;
while(! done) {
if(dataProc) {
err = CallICMDataProc(dataProc, &dataPtr, 10000, dataRefCon);
if(err) goto bail;
}
err = consumeUpTo10000Bytes(..., dataPtr, &bytesConsumed, &done);
if(err) goto bail;
dataPtr += bytesConsumed;
}
|
- É|ÉCÉìÉ^ÇÃÉAÉhÉåÉXÇÃë„ÇÌÇËÇ… NULL ÇìnÇ∑ÇΔì¡ï Ç»à”ñ°Ç…Ç»ÇËÇ‹Ç∑ÅB
bytesNeeded ÉpÉâÉÅÅ[É^Ç™É[ÉçÇÃèÍçáÇÕÅAÉfÅ[É^ÉXÉgÉäÅ[ÉÄÇÃêÊì™Ç…ÉäÉZÉbÉgÇ∑ÇÈDZÇΔÇóvãÅǵÅAbytesNeeded ÉpÉâÉÅÅ[É^Ç™É[Éçà»äOÇÃèÍçáÇÕÅAǪÇÃÉoÉCÉgêîï™ÇÃëäëŒìIÇ»ÉVÅ[ÉNÇóvãÅǵNjÇ∑ÅBëäëŒìIÇ»ÉVÅ[ÉNÇÃëOÇ…ÅAÉfÅ[É^ÉçÅ[ÉhÉvÉçÉVÅ[ÉWÉÉÇÕÅAǪÇÃÉoÉbÉtÉ@íÜÇÃÉ|ÉCÉìÉ^ÇÃà íuÇîFéØÇµÇƒÇ¢ÇÈDZÇΔÇämîFÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃämîFÇÕÅAÉ[ÉçÉoÉCÉgÇóvãÅÇ∑ÇÈÉfÅ[É^ÉvÉçÉVÅ[ÉWÉÉÇåƒÇ—èoÇ∑DZÇΔÇ…ÇÊÇËçsǶNjÇ∑ÅB
ÉfÅ[É^ÉXÉgÉäÅ[ÉÄÇÃêÊì™Ç÷ÇÃÉäÉZÉbÉgÅF
err = CallICMDataProc(dataProc, NULL, 0, dataRefCon);
|
ëäëŒìIÇ»ÉVÅ[ÉNÅF
err = CallICMDataProc(dataProc, &dataPtr, 0, dataRefCon);
err = CallICMDataProc(dataProc, NULL, relativeSeekAmount, dataRefCon);
|
ǪÇÃdžÇΔÇÃì«Ç›éÊÇËÅF
err = CallICMDataProc(dataProc, &dataPtr, bytesNeeded, dataRefCon);
|
- äÑÇËìñǃÇΩÉÅÉÇÉäÉuÉçÉbÉNÇ…ÉfÅ[É^ÇÉçÅ[ÉhÇ∑ÇÈÇ…ÇÕÅA
BeginBand ÉãÅ[É`ÉìÇ≈éüÇÃèàóùÇé¿çsǵNjÇ∑ÅB
Ptr dataPtr = drp->codecData;
Ptr bufferPtr = myBuffer;
Size bytesRemaining = myBufferSize;
while(bytesRemaining > 0) {
Size bytesToRequest;
if(bytesRemaining < codecMinimumDataSize)
bytesToRequest = bytesRemaining;
else
bytesToRequest = codecMinimumDataSize;
err = CallICMDataProc(dataProc, &dataPtr, bytesToRequest, dataRefCon);
if(err) goto bail;
BlockMoveData(dataPtr, bufferPtr, bytesToRequest);
dataPtr += bytesToRequest;
bufferPtr += bytesToRequest;
bytesRemaining -= bytesToRequest;
}
|
[2003 îN 7 åé 10 ì˙]
|